package com.miplus.ccrm.workflow.nodes;

import com.miplus.ccrm.workflow.model.enums.VersionType;
import com.miplus.ccrm.workflow.logic.LogicFlow;

public interface IFlowConverter {

    /**
     *  核心方法，用于转换逻辑流
     * @param _logicFlow
     * @return 转换后的代码字符串
     */
   abstract String converter(LogicFlow _logicFlow);

    /**
     * 获取版本类型
     * @return VersionType 版本类型
     */
   abstract VersionType getVersionType();

  /**
    * 打印参数
    * @param param 参数
    * @return 打印后的字符串
    */
   abstract String print(String param);

   /**
    * 打印值
    * @param param 参数
    * @return 打印值后的字符串
    */
   abstract String printValue(String param);

   /**
    * 生成try-catch代码块
    * @param tryBlock try代码块
    * @param catchBlock catch代码块
    * @param exceptionVar 异常变量名
    * @return 生成的try-catch代码字符串
    */
   abstract String tryCatch(String tryBlock, String catchBlock,String exceptionVar);

    /**
     * 生成try-catch代码块（数组形式）
     * @param tryBlock try代码块数组
     * @param catchBlock catch代码块数组
     * @param exceptionVar 异常变量名数组
     * @return 生成的try-catch代码字符串
     */
   abstract String tryCatch(String[] tryBlock, String[] catchBlock,String exceptionVar);

   /**
    * 声明变量
    * @param varName 变量名
    * @param varValue 变量值
    * @return 声明变量的代码字符串
    */
   abstract String declareVar(String varName, String varValue,String functionName);

    /**
     * 声明全局变量
     * @param varName 变量名
     * @param varValue 变量值
     * @return 声明全局变量的代码字符串
     */
   abstract String globalVar(String varName, String varValue);

    /**
     * 获取声明路径变量的代码字符串
     * @param pathVarName 路径变量名
     * @return 声明路径变量的代码字符串
     */
   abstract String getDeclareVar(String pathVarName);

   abstract  String Template();

   abstract  String getNowDateTime();
}